package com.dpj.noLock.atomic;

import java.util.concurrent.atomic.AtomicInteger;

public class Test1 {
    public static void main(String[] args) {
        AtomicInteger i=new AtomicInteger(0);

        /*
        这些方法都能保证被操作的数是一个整体,具有原子性
        如果是int 类型的 i++ ,你知道底层其实是三个操作指令，并不具备原子性
         */
        System.out.println(i.incrementAndGet());//++i  1
        System.out.println(i.getAndIncrement());//i++  2

        System.out.println(i.getAndAdd(5)); // 2 7
        System.out.println(i.addAndGet(5)); //12 12


        AtomicInteger ai=new AtomicInteger(9);

//        ai.getAndUpdate(value -> value * 10);

        //上面那个getandUpdate底层就是这个cas进行的
        while (true){
            int prev = ai.get();
            int next = prev * 10;
            if(ai.compareAndSet(prev,next)){
                break;
            }
        }

        System.out.println(ai.get());

    }
}
